package com.lv.mall.product;

import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.openfeign.EnableFeignClients;

/**
 * 1、整合Mybatis-plus
 *      ①导入依赖
 *      ②配置
 *         1、配置数据源
 *              1）导入数据库的驱动
 *              2） 在application.yml配置数据源相关信息
 *         2、配置Mybatis-plus
 *              1）使用MapperScan
 *              2)  告诉Mabits-plus   sql映射文件位置
 *
 *  使用逻辑删除  配置全局逻辑删除规则
 *  低版本mybatis-plus需要配置逻辑删除组件   Bean
 *  给Bean加上逻辑删除注解@TableLogic    mysql插入元素1062-Duplicate entry '1003' for key 'PRIMARY'
 *
 *  JSR303后端校验
 *  1）给Bean添加校验注解 javax.validation.constrains   并定义自己的message提示
 *  2）开启校验功能    @Valid
 *  效果：校验错误，会有默认的响应
 *  3）给校验的bean后面紧跟一个BindingResult，就可以获取到校验的结果
 *  4）使用统一的异常处理 SpringMVC提供的@ControllerAdvice
 *      使用 @ExceptionHandler    标注可以处理的异常
 *      分组校验（多场景的复杂校验）    校验修改和新增的情况
 *          给校验注解标注什么情况下需要进行校验
 *          @Validated(AddGroup.class)
 *          未标注分组的注解 分组情况下不起作用，未检验分组的情况下生效
 *  5)自定义校验 
 *      编写自定义校验注解
 *      编写自定义的校验器   ConstraintValidator
 *      关联自定义的校验器和自定义的校验注解
 *      @Documented
 *      @Constraint(validatedBy = {ListValueConstraintValidator.class}可以指定多个不同的校验器，适配不同类型的校验)  // 指定校验器
 *      @Target({METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER, TYPE_USE})   // 注解可以标注的位置
 *      @Retention(RUNTIME)
 *
 */
@EnableDiscoveryClient
@MapperScan("com.lv.mall.product.dao")  // 扫描mapper接口
@EnableFeignClients(basePackages = "com.lv.mall.product.feign")
@SpringBootApplication
public class MallProductApplication {

    public static void main(String[] args) {
        SpringApplication.run(MallProductApplication.class, args);
    }

}
